def Get3DCuvDerivat(rank:int, u:float, Cs:[list,list,list,...]):
    '''
        功能：求幂基参数多项式空间曲线p(u)上参数为u点处的rank阶导矢。
        输入参数：rank-导矢阶数；
                  u-参数；
                  Cs-幂基参数多项式空间曲线的系数矢量。
        输出参数：pv-rank阶导矢，若rank=0，p=p(u)即曲线参数为u的点。
    '''
    Fact = lambda n: 1 if n==0 else n*Fact(n-1) # 计算n的阶乘。
    pv = [0]*3
    for i in range(rank,len(Cs)):
        pu = u**(i-rank)
        for j in range(3):
            pv[j] += Fact(i)/Fact(i-rank)*Cs[i][j]*pu
    return pv

if __name__ == '__main__':
    Cs = [[  0.        ,   2.       ,    3.        ],
         [ 21.66666667 , 13.33333333 , 13.33333333],
         [-37.5        ,-18.75       ,-18.75      ],
         [ 20.83333333 , 10.41666667 , 10.41666667]]
    pv = Get3DCuvDerivat(2, 0.21, Cs)
    print(pv)